home *** CD-ROM | disk | FTP | other *** search
- // Gestionnaire de boutons V0.22
- // (C) 1992 Christophe PASSUELLO
- // Sat Feb 20 15:24:24 1993
-
-
- #include <exec/types.h>
- #include <exec/memory.h>
- #include "mytypes.h"
- #define INTUITION_PREFERENCES_H 0
- #include <intuition/intuition.h>
- #include "IObject_priv.h"
-
-
- struct Button
- {
- struct ObjectTMV *TMV;
- UWORD ObjectID;
- UWORD Flags;
- STRPTR LabelText;
- struct TextFont *Font;
- struct Window *window;
- struct Requester *requester;
- UWORD ClassFlags;
- struct Box BorderBox;
- struct Gadget Gadget;
- };
-
-
- // prototypes pour les methodes
- PRIVATE BOOL ButtonMsg(struct Button *, struct IntuiMessage *);
- VOID ModifyButton(struct Button *, BOOL);
- PRIVATE VOID DisplayButton(struct Button *);
- PRIVATE VOID EraseButton(struct Button *);
- PRIVATE BOOL ButtonValue(struct Button *);
- PRIVATE VOID OnButton(struct Button *);
- PRIVATE VOID ActivateButton(struct Button *);
-
-
- // Methodes pour les Buttons
- const static struct ObjectTMV ButtonMethod=
- {
- CLASS_BUTTON, sizeof(struct Button),
- DisposeObject, ButtonMsg, AddObject, RemoveObject, DisplayButton, EraseButton,
- ModifyButton, ButtonValue, OffObjectGad, OnButton, ActivateButton
- };
-
-
- //
- // Alloue et Initialise le Button
- //
- struct Button *CreateButton(struct NewButton *nb, UWORD ID)
- {
- struct Button *but;
-
- if (but = (struct Button *) AllocMem(sizeof(struct Button), MEMF_PUBLIC|MEMF_CLEAR))
- {
- // Initialise la TMV
- but->TMV = &ButtonMethod;
- but->ObjectID = ID;
-
- // recupere les champs de NewButton
- InitObjectGad( (struct ObjectGad *) but, (struct NewObject *) nb);
- but->Gadget.GadgetType = BOOLGADGET;
- but->Gadget.Flags = GADGHCOMP;
-
- if (but->ClassFlags & BT_TOGGLE)
- {
- but->Gadget.Activation = GADGIMMEDIATE|TOGGLESELECT;
- if (but->ClassFlags & BT_SELECTED)
- but->Gadget.Flags |= SELECTED;
- }
- else
- but->Gadget.Activation = RELVERIFY;
-
- // Centre l'image dans le bouton
- if (but->ClassFlags & BT_IMAGELABEL)
- {
- struct Image *img;
-
- img = (struct Image *) but->LabelText;
- img->LeftEdge = but->BorderBox.x + (but->BorderBox.w - img->Width) / 2;
- img->TopEdge = but->BorderBox.y + (but->BorderBox.h - img->Height) / 2;
- }
- }
- return (but);
- }
-
-
- //
- // Renvoie l'etat du bouton
- //
- PRIVATE BOOL ButtonValue(struct Button *but)
- {
- return (but->Gadget.Flags & SELECTED ? TRUE : FALSE);
- }
-
-
- //
- // Modifie le bouton
- //
- PRIVATE VOID ModifyButton(struct Button *but, BOOL select)
- {
- if (but->ClassFlags & BT_TOGGLE)
- {
- if ((!select && (but->ClassFlags & BT_SELECTED)) || (select && !(but->ClassFlags & BT_SELECTED)))
- {
- but->ClassFlags ^= BT_SELECTED;
- but->Gadget.Flags ^= SELECTED;
- if (!(but->Flags & OBJ_DISABLED))
- ComplementBox(&but->BorderBox, but->window->RPort);
- }
- }
- }
-
-
- //
- // Active un bouton
- //
- PRIVATE VOID ActivateButton(struct Button *but)
- {
- if (but->ClassFlags & BT_TOGGLE)
- ModifyButton(but, (but->ClassFlags & BT_SELECTED) ? FALSE : TRUE);
- else
- {
- ComplementBox(&but->BorderBox, but->window->RPort);
- Delay(5);
- ComplementBox(&but->BorderBox, but->window->RPort);
- }
- }
-
-
- //
- // gestion de l'IntuiMessage pour le bouton
- //
- PRIVATE BOOL ButtonMsg(struct Button *but, struct IntuiMessage *msg)
- {
- return (TRUE);
- }
-
-
- //
- // Efface le Button
- //
- PRIVATE VOID EraseButton(struct Button *but)
- {
- if (but->ClassFlags & BT_IMAGELABEL)
- EraseBox( &but->BorderBox, but->window->RPort);
- else
- EraseObjectFrame( (struct Object *) but, &but->BorderBox);
- }
-
-
- //
- // Affiche le Button
- //
- PRIVATE VOID DisplayButton(struct Button *but)
- {
- struct RastPort *rp;
- struct TextEnv env;
-
- if (but->window)
- {
- rp = but->window->RPort;
- SaveTextEnv(but->window->RPort, &env);
- if (but->ClassFlags & BT_IMAGELABEL)
- DrawImage(rp, (struct Image *) but->LabelText, 0L , 0L);
- else
- PrintObjectLabel( (struct Object *) but, (struct Box *) &but->BorderBox);
-
- FastDraw3DBox( (struct Box *) &but->BorderBox, rp, BOX_1OUT);
- RestoreTextEnv(rp, &env);
-
- if (but->ClassFlags & (BT_SELECTED))
- ComplementBox(&but->BorderBox, rp);
-
- if (but->Flags & OBJ_DISABLED)
- OffObjectGad((struct ObjectGad *) but);
- }
- }
-
-
- //
- // Ghoste un bouton
- //
- PRIVATE VOID OnButton(struct Button *but)
- {
- if (but->Flags & OBJ_DISABLED)
- {
- but->Flags &= (~OBJ_DISABLED);
- OnGadget(&but->Gadget, but->window, but->requester);
- EraseBox( (struct Box *) &but->Gadget.LeftEdge, but->window->RPort);
- DisplayButton(but);
- }
- }
-